package partyBrookerHameln;
/**
 * Die Klasse Verleih erbt von der Klasse Transaktion und enthält die Methoden
 * für verleihbare Objekte.
 *
 */
public class Verleih extends Transaktion {
	public Datum ausleihDatum, ablaufDatum;
	private boolean zurueckgegeben;

	/**
	 * Der Konstruktor für die Verleih Klasse.
	 * 
	 * @param objekt
	 *            , das zu verleihen ist.
	 * @param anzahl
	 *            an Verleih-Objekten.
	 * @param ausleihDatum
	 *            an dem die Objekte ausgeliehen werden.
	 * @param zeit
	 *            voraussichtliche Leihdauer.
	 */
	public Verleih(Gegenstand objekt, int anzahl, Datum ausleihDatum, int zeit) {
		super(objekt, anzahl);
		this.ausleihDatum = new Datum(ausleihDatum);
		ablaufDatum = new Datum(ausleihDatum, zeit);
		zurueckgegeben = false;

	}

	public void setZurueckgegeben(boolean z) {
		zurueckgegeben = z;
	}

	public boolean getZurueckgegeben() {
		return zurueckgegeben;
	}

	/**
	 * Die Methode berechnet die anfallenden Kosten für den Verleih aus Kosten,
	 * Anzahl, Leihdauer und gegebenenfalls Handlingpauschale.
	 * 
	 * @param tagesDatum
	 *            um durch die Differenz aus Leihdatum und Tagesdatum die Dauer
	 *            des Ausleihens und eventuell Strafgebühren zu berechnen.
	 * @return die Kosten für den Verleih der Objekte.
	 */
	public double gebuehrenBerechnen(Datum tagesDatum) {
		double summe = 0;
		// HandlingPauschale
		summe += objekt.getHandlingPauschale() * objekt.getBestand();
		// Leihgebühr
		summe += objekt.getLeihGebuehr() * anzahl * ausleihDatum.differenzBerechnen(ablaufDatum);
		if (ablaufDatum.differenzBerechnen(tagesDatum) > 0) {
			summe += objekt.getLeihGebuehr() * anzahl * ablaufDatum.differenzBerechnen(tagesDatum) * 2;
		}
		// Wertersatz
		summe += (anzahl - objekt.getBestand()) * objekt.getWertersatzVerlust();
		super.kosten = summe;
		return summe;

	}

	/*
	 * Methode für die Formatierung der Ausgabe von Verleihtransaktionen.
	 */
	public String toString() {
		return "║" + formatBlanks(String.valueOf(objekt.getName()), 35) + "║" + formatBlanks(String.valueOf(anzahl), 4) + "║" + formatBlanks(ausleihDatum.toString(), 17) + "║"
				+ formatBlanks(ablaufDatum.toString(), 17) + "║" + formatBlanks(zurueckgegeben ? "Ja" : "Nein", 4) + "║"
				+ formatBlanks(zurueckgegeben ? String.valueOf((super.getAnzahl() - super.objekt.getBestand())) : "    ", 4) + "║" + formatBlanks(super.getabgeschlossen() ? "Ja" : "Nein", 4) + "║"
				+ formatBlanks(super.getabgeschlossen() ? String.valueOf(super.kosten) : " ", 8) + "║";
	}

}
